<template>
  <!-- 父组件只能有input这个根元素，那么在父组件中使用子组件的位置填写的属性与属性值就会直接赋值到的子组件的根元素上，而我们就是需要在这个input上赋值placeholder这个属性，所以在子组件中就不能有props属性和只能有一个根元素 -->
  <input
    type="text"
    class="myinput"
    @input="handlerInput"
    @blur="handlerBlur"
    :[pn]="{ success: flag, error: !flag }"
  />
</template>

<script>
export default {
  data() {
    return {
      flag: "",
      pn: "aa",
    };
  },
  props: {
    rules: {
      type: RegExp,
    },
    msg: {
      type: String,
    },
  },
  methods: {
    handlerInput(e) {
      // 传递输入框的值到父组件
      this.$emit("input", e.target.value);
      if (this.rules) {
        // 有规则，再赋值给pn，实现动态添加样式
        this.pn = "class";
        if (this.rules.test(e.target.value)) {
          this.flag = true;
        } else {
          this.flag = false;
        }
      }
    },
    handlerBlur(e) {
      // 输完全部，失焦后，再触发pn
      //   this.pn = "class";
      if (this.rules && !this.rules.test(e.target.value)) {
        // console.log(this.msg);
        // this.$toast.fail(this.msg);
        // vant的轻提示对象形式
        this.$toast.fail({
          message: this.msg,
          position: "center", //有top，bottom，center（默认）可选
          duration: 3000, //默认参数值是2000,可手动设置，通过duration
        });
      }
    },
  },
};
</script>

<style lang="less" scoped>
.myinput {
  width: 318 / 360vw * 100;
  height: 60px;
  outline: none;
  border: 0;
  border-bottom: 3px solid #ccc;
  color: #888;
  font-size: 20px;
  line-height: 60px;
}
.success {
  border-bottom-color: green;
  color: green;
}
.error {
  border-bottom-color: red;
  color: red;
}
</style>